package org.example.study2;

public class Demo_207_Revise2 {
    public static void main(String[] args) throws InterruptedException {
        // 创建新线程
        Thread thread = new Thread(() -> {
            while (!Thread.currentThread().isInterrupted()) {
                System.out.println("张三转账处理中...");

                try {
                    // 线程休眠1秒（此时可能被中断）
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // 当sleep被中断时会抛出异常
                    e.printStackTrace();
                    System.out.println("休眠被中断");
                    // 重新设置中断标志
                    Thread.currentThread().interrupt();
                }
            }
            System.out.println("转账终止");
        },"张三");

        // 线程启动前存活状态
        System.out.println("线程是否存活：" + thread.isAlive());
        System.out.println("主线程: 启动张三转账");
        thread.start();
        Thread.sleep(1000);
        System.out.println("线程是否存活：" + thread.isAlive());
        System.out.println("主线程: 紧急通知！对方是骗子，停止转账！");
        thread.interrupt();
        thread.join();
        System.out.println("线程是否存活：" + thread.isAlive());

    }
}
/*
输出：
线程是否存活：false
主线程: 启动张三转账
张三转账处理中...
张三转账处理中...
线程是否存活：true
主线程: 紧急通知！对方是骗子，停止转账！
休眠被中断
转账终止
线程是否存活：false
java.lang.InterruptedException: sleep interrupted
	at java.base/java.lang.Thread.sleep(Native Method)
	at org.example.study2.Demo_207_Revise2.lambda$main$0(Demo_207_Revise2.java:12)
	at java.base/java.lang.Thread.run(Thread.java:842)
*/

/*中断状态重置
在捕获InterruptedException后，通过Thread.currentThread().interrupt()重新设置中断标记。
保证while(!isInterrupted)能正确检测到中断状态，触发循环退出。*/